package Extraction;

import java.util.ArrayList;
import Creche.Main.*;
import Creche.Donnees.*;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Extraction {
	
	private ArrayList<Creche> listCreches;
	
	public Extraction() {
		if (listCreches == null)
			listCreches = new ArrayList<Creche>();
		
		updateCSV();
	}
	
	/**
	 * On extrait les données du fichier csv en veillant à ne pas
	 * effacer les crèches précédemment enregistrées
	 */
	public void updateCSV() {
		
		try {
		BufferedReader buf = new BufferedReader(new InputStreamReader(
		Thread.currentThread().getContextClassLoader().getResourceAsStream("Creches.csv")));
		 
		try {
		String ligne;
		boolean lecture = false;
		
		while ((ligne = buf.readLine()) != null) {
			if (!lecture) {
				lecture = true;
			}
			else {
				String str[] = ligne.split(";");
				str[9] = str[9].replace(",", ".");
				str[10] = str[10].replace(",", ".");
				
				double coord_x = Double.parseDouble(str[9]);
				double coord_y = Double.parseDouble(str[10]);
				
				if (listCreches != null) {
					if (!isInList(str[0], str[3])) {
						listCreches.add(new Creche(str[0], new Adresse(str[3], 
						str[2], str[4], str[11], coord_x, coord_y), 
						new ArrayList<Donnee>(), new ArrayList<Actualite>()));
					}
				}
				else {
					listCreches.add(new Creche(str[0], new Adresse(str[3], 
					str[2], str[4], str[11], coord_x, coord_y), 
					new ArrayList<Donnee>(), new ArrayList<Actualite>()));
				}
			}
		}
		
		} finally {
		buf.close();
		}
		
		} catch (IOException ioe) {
		System.out.println("Erreur de flux : " + ioe.toString());
		}
	}
	
	/**
	 * Indique si le nom d'une crèche est contenu 
	 * dans la liste des crèches
	 * @param nom de la crèche
	 * @param ville de la crèche
	 * @return un booléen
	 */
	public boolean isInList(String nom, String ville) {
		for (Creche c : listCreches) {
			if (nom.equals(c.getNom()) && ville.equals(c.getAdresse().getVille()))
				return true;
		}
		return false;
	}
	
	/**
	 * @return la liste des crèches
	 */
	public ArrayList<Creche> getListCreches() {
		return listCreches;
	}

}
